package Thread;

//线程终止

/*
*异常确实是出现了，sleep确实是唤醒了，但是上述t仍然在继续工作，并没有真的结束
* interrupt唤醒线程后，此时sleep方法抛出异常
* 同时会自动清除刚才设置的比啊职位，这样就使“设置标志位”这样的效果好像没有生效一样
* 为什么这么设定？
* java是期望，当线程收到“要中断“这样的信号的时候，它能够自由决定，接下来怎么处理
* 同样，线程也可以采用下述三种方式来进行操作
* 就可以让咱们有更多的“可操作性空间”
* 可操作性空间的前提，是通过“异常”的方式唤醒的
* 如果没有sleep，就没有上述操作空间
* （此时没有异常，目的就非常明确，如果有异常，就需要再出现异常后，再确认一下）
* */
public class Demo9 {
    public static void main(String[] args) {
        Thread t = new Thread(()->{
            //Thread类内部，有一个现成的标记位，可以用来判定当前的循环是否要结束
            while(!Thread.currentThread().isInterrupted()){
                System.out.println("线程工作中");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    //1.假装没听见，循环继续正常进行
                    e.printStackTrace();
                    //2.加上一个break，表示让线程直接结束
                    //3.做一些其他工作，完成之后再结束
                    //其他工作的代码放在这里
                    break;
                }
            }
        });
        t.start();
        try {
            Thread.sleep(5000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("让线程t终止工作");
        t.interrupt();
    }
}
